home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / amiga / opalvisn / devdocs.lha / OVDevManual.TXT < prev    next >
Text File  |  1993-05-04  |  64KB  |  1,507 lines

  1.  
  2.             OpalVision Programmers Technical Reference Manual      
  3.  
  4.  
  5.  
  6.  
  7.                               Version 1.2
  8.  
  9.  
  10.  
  11.  
  12.                 Copyright Opal Technology, 29th  Sep, 1992
  13.  
  14.  
  15.  
  16. This manual was written by the OpalVision development team :
  17.  
  18.     - Martin Boyd
  19.     - Prashant Maharaj
  20.     - Gary Rayner    
  21.     - Robert Roy
  22.     
  23. with special thanks to:
  24.  
  25.     - Centaur Development Inc. 
  26.  
  27.  
  28. Copyright ⌐ 1992 by Opal Technology Pty Ltd.  All rights reserved.  No part
  29. of  this  publication may be copied, photocopied, reproduced, translated or
  30. distributed  in  any  form  or  by  any  means, or stored in a data base or
  31. retrieval  system,  without the prior written permission of Opal Technology
  32. Pty Ltd.
  33.  
  34. OpalVision  is a trademark of Opal Technology Pty Ltd.  Amiga and Workbench
  35. are registered trademarks of Commodore-Amiga, Inc.
  36.  
  37. Opal   Technology   Pty  Ltd,  its  employees  and  distributors,  take  no
  38. responsibility   expressed   or   implied  for  the  quality,  performance,
  39. merchantability  or  fitness  for any particular purpose of the information
  40. presented  herein.   The  information in this manual is presented on an "As
  41. Is"  basis.   The user takes full responsibly for the quality, performance,
  42. correctness  or  any  damage  incurred  by  use  of this information.  Opal
  43. Technology  Pty Ltd reserves the right to change information in this manual
  44. without  notice.   Opal  Technology Pty Ltd, its employees and distributors
  45. will  not  under  any  circumstances  be  liable  for any direct, indirect,
  46. incidental  or  consequential  damages  incurred by use of this information
  47. even if the possibility of such damage is known.  
  48.  
  49.  
  50.                              TABLE OF CONTENTS
  51.  
  52. INTRODUCTION                        1.0
  53.  
  54. FEATURES OF THE OPALVISION MOTHER BOARD            2.0
  55.  
  56. THE OPALVISION SCAN RATE CONVERTER            3.0
  57.  
  58. THE OPALVISION VIDEO ROASTER CHIP            4.0
  59.  
  60. FUNCTIONAL DESCRIPTION OF VIDEO COMMUNICATION        5.0
  61.  
  62. DIGITIAL COMMUNICATION                    6.0
  63.  
  64. COLOUR MODES                        7.0
  65.     24Bit Modes                    7.1
  66.     8Bit Modes                    7.2
  67.     15Bit Mode                    7.3
  68.     Colour Mode Selection                7.4
  69.  
  70. STENCIL MODES                        8.0
  71.     Playfield Stencil                8.1
  72.     Priority Stencil                8.2
  73.  
  74. MEMORY STRUCTURE                    9.0
  75.  
  76. REGISTERS                        10.0
  77.     The Control Line Register            10.1
  78.     The CoPro                    10.2
  79.     Palette Registers                10.3
  80.     Pixel Read Mask Register            10.4
  81.     Address Load Register                10.5
  82.     Video Command Register                10.6
  83.     Palette Load Register                10.7
  84.     The Video Roaster Chip                10.8
  85.  
  86. THE LIBRARY                        11.0
  87.     The Opalscreen Structure            11.1
  88.     Types of Opalscreens                11.2
  89.     Drawing Routines                11.3
  90.     Frame Buffer Updating                11.4
  91.     Logical Frames                    11.5
  92.     Dual Playfield Mode                11.6
  93.     Maniputlaing the Opalvision Registers        11.7
  94.     Screen Positioning                11.8
  95.     Horizontal Synchronization            11.9
  96.     Ownership                    11.10
  97.  
  98. SUMMARY OF LIBRARY FUNCTIONS                12.0
  99.     Drawing Routines                12.1
  100.     Conversion Routines                12.2
  101.     Coprocessor Routines
  102.     
  103. DEFINITION OF TERMS                    13.0
  104.  
  105.        ============================================================
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112. 1.0    INTRODUCTION
  113.  
  114. OpalVision is modular integrated 24bit graphics and video environment
  115. developed with total integration into the Amiga environment in mind.  To
  116. maintain this philosophy the system has been designed to take advantage of
  117. the many specialized and highly productive hardware features of the Amiga.
  118. The OpalVision system provides the freedom and expandability to fit the
  119. specific needs of the user.
  120.  
  121. Designed as one modular unit, OpalVision circumvents the usual problems
  122. with incompatibility and loss of signal integrity associated with the many
  123. external components available from separate third parties, and the "Rat's
  124. Nest" usually required to connect them.  With the initial release of this
  125. product three expansion modules are available; The Frame Grabber Frame
  126. Grabber Genlock Module, the Scan Rate Converter Module
  127. and the Video Roaster Chip.  The first two of these modules will be fully
  128. supported in the OpalVision development library.  The modules connect
  129. directly to the OpalVision expansion card without tying up separate slots.
  130.  
  131. Because of the expandable nature of the system Opal Technology strongly
  132. recommends strict adherence to the OpalVision Development Library.  In the
  133. library we have included a comprehensive range of functions encompassing
  134. all modes and resolutions supported by the hardware.  The library also
  135. includes OpalVision Screen Management , Drawing , IFF,
  136. Coprocessor, Virtual Screen, Display Control, Frame Grabber Control and
  137. Linear Keyer Control routines.  If you find that the library has any
  138. inadequacies in relation to your specific application Opal Technology will
  139. gladly consider updating the library to suit your requirements.
  140.  
  141. The OpalVision system offers an extremely cost effective entry into the
  142. world of high quality 24bit graphics.  With the addition of
  143. the Frame Grabber + Genlock module and the sophisticated effects of the
  144. Video Roaster Chip, it offers an equally satisfactory solution to the world
  145. of Amiga desktop video.  We at Opal Technology have attempted to provide a
  146. consistent and sustainable platform on which to build.  Any suggestions or
  147. recommendations will be gratefully considered.
  148.  
  149.  
  150. 2.0    FEATURES THE OPALVISION MOTHER BOARD
  151.  
  152. The OpalVision Mother Board is the heart of the OpalVision System.  It is
  153. designed to reside in the Amiga 2000 or Amiga 3000 video slot.  The
  154. OpalVision Mother Board is the most basic implementation of the OpalVision
  155. system.  The OpalVision Mother Board incorporates a 24bit, 15bit and 8bit
  156. true colour modes, 24bit and 8bit Palette mapped display modes, Dual
  157. Playfield and Overlay Priority stencil modes and a graphics coprocessor.
  158. This range of modes provides the flexibility to meet the wide range of
  159. graphics requirements from animation to real time video
  160. effects to high resolution true colour graphics manipulation.
  161.   
  162. OpalVision provides three different True Colour modes
  163. all of which are available in all supported resolutions.
  164. 24bit True Colour which provides one byte for each of the primary colours.
  165. This provides and effective colour range of 16.8 million colours.  15bit
  166. True Colour provides 5 bits of information for each of the primary colours.
  167. This provides an effective colour range of 32,768 colours.  This mode has
  168. the advantage of higher speed updates due to its lower data requirements.
  169. Finally 8bit True Colour which provides 3bits of red, 3bits of
  170. green and 2bits of blue.  With an effective colour range of 256 colours
  171. this mode provides high speed update at the expense of colour range.
  172.  
  173. OpalVision also supports two different Palette Mapped colour modes.  24bit
  174. Palette Mapped passes all 24bits of data through three 8bit x 256 lookup
  175. tables immediately prior to display.  Each lookup table corresponds to one
  176. of the primary colours.  This feature is especially useful for contrast and
  177. gamma correction and for smooth fade image transitions.  When coupled with
  178. the Frame Grabber it can also be used for real time effects with live video
  179. such as white balance, contrast and gamma correction, solarization,
  180. negative and colourisation effects.  8bit Palette Mapped is a standard
  181. palette mapped configuration allowing access to 256 colours from palette of
  182. 16.8 million (256 x 24bit palette registers).
  183.  
  184. OpalVision incorporates two stencil modes; Overlay Priority stencil and
  185. Dual Playfield Priority stencil.  Overlay Priority allows the OpalVision or
  186. the Amiga to be given foreground priority on a pixel by pixel basis.  This
  187. is particularly useful for backdrop type applications where the speed and
  188. operating system advantages of Amiga graphics can be freely combined with
  189. the numerous advantages of OpalVision graphics.  The Dual Playfield
  190. Priority provides foreground priority information between two OpalVision
  191. screens.  This feature is especially useful for transitions between
  192. OpalVision images.
  193.  
  194. The OpalVision graphics coprocessor has the ability to change OpalVision
  195. display modes and start address on a line by line basis.  This provides the
  196. ability to freely change resolution, stencil modes, a host of transition
  197. effects and smooth scrolling between multiple adjacent screens.
  198.  
  199. Below is a table of the most commonly used display resolutions available
  200. with OpalVision
  201.  
  202.  
  203. Low Resolution High Resolution Low Resolution Interlaced* High Resolution
  204. Interlaced*
  205.  
  206. +--------------+------------+-----------+-----------+-----------+
  207. |PAL           |  320 x 256 | 640 x 256 | 320 x 512 | 640 x 512 |
  208. +--------------+------------+-----------+-----------+-----------+
  209. |PAL Overscan  |  384 x 286 | 768 x 286 | 384 x 576 | 768 x 576 |
  210. +--------------+------------+-----------+-----------+-----------+
  211. |NTSC          |  320 x 200 | 640 x 200 | 320 x 400 | 640 x 400 |
  212. +--------------+------------+-----------+-----------+-----------+
  213. |NTSC Overscan |  384 x 236 | 768 x 236 | 384 x 476 | 768 x 476 |
  214. +--------------+------------+-----------+-----------+-----------+
  215.  
  216. *De-interlaced when Scan Rate Converter Present The OpalVision Genlock and
  217. Frame Grabber
  218.  
  219.  
  220. The OpalVision Genlock and Frame Grabber module is a true 24bit frame
  221. grabber, genlock, composite decoder (colour splitter), composite encoder,
  222. 256 level linear keyer with alpha channel output and live video effects
  223. processing system.  It does not require a still frame or any sort of signal
  224. preparation for grabbing of images.  The module is easily installed
  225. directly on to the OpalVision mother board and provides its configuration
  226. information to the library.  The module has direct access to the memory and
  227. control systems of the OpalVision Mother Board and therefore appears as one
  228. seamless unit to the software.  The Genlock and Frame Grabber Module will
  229. be fully supported by the library.
  230.  
  231. The Genlock synchronizes both the OpalVision and the Amiga to an external
  232. video signal.  This allows OpalVision or Amiga graphics to be overlaid on a
  233. live video signal.  It also provides the timing and synchronization for the
  234. frame grabber and live video effects system.
  235.  
  236. The Composite Decoder receives the incoming composite video signal and
  237. breaks it down into RGB video.  This is the form required for both the
  238. frame grabber and live effects system.
  239.  
  240. The Frame Grabber is directly connected to the main OpalVision memory
  241. through a 48 bit data bus.  This enables it to digitize all three primary
  242. colours in parallel and at full frame rate while displaying the digitized
  243. video though all the special effects capabilities on the OpalVision Mother
  244. Board.  e.g.  Displaying live video with white balance correction, gamma
  245. correction, increased contrast and seen through an Overlay Priority Stencil
  246. with warping effects provided by the Coprocessor.  Depending on the
  247. resolution the frame grabber is also capable of grabbing and storing
  248. multiple sequential frames which may easily be downloaded into Amiga memory
  249. for modification.
  250.  
  251. The Composite Encoder converts the processed RGB.  into composite or SVHS
  252. video for easy export to video equipment.
  253.  
  254. The linear keyer offers the ability to set variable transparency between
  255. OpalVision graphics and live video on a pixel by pixel basis.  OpalVision
  256. provides 256 levels of transparency which allows the user to implement
  257. complex titling effects and video overlay transitions.  The linear keyer is
  258. capable of running at full frame rate in all resolutions.
  259.  
  260. The OpalVision Genlock + Frame Grabber module provides a comprehensive
  261. array of features specifically designed for the desktop video industry.
  262.  
  263. 3.0    THE OPALVISION SCAN RATE CONVERTER
  264.  
  265. The OpalVision Scan Rate Converter is designed de-interlace and double the
  266. effective scan rate of the video signal so as to provide flicker free video
  267. for those users willing to invest in a high scan rate or multi sync
  268. monitor.  The OpalVision Scan Rate Converter also provides flicker free
  269. Amiga and live video and is capable of acting as a fully independent frame
  270. buffer.
  271.  
  272. 4.0    THE OPALVISION VIDEO ROASTER CHIP
  273.  
  274. The OpalVision Video Roaster Chip is a reconfigurable hardware device
  275. situated between the address generation hardware and the memory address
  276. lines.  This allows picture information to be redirected to different
  277. screen locations dynamically.  This combined with the ability of the frame
  278. grabber and genlock module to continuously update the OpalVision memory
  279. with live video provides for a host of complex and flexible video effects
  280. which can be fully implemented in real time with no more than one field
  281. delay.
  282.  
  283. The Video Roaster is a reconfigurable hardware device which adds another
  284. dimension to the systems flexibility.  The Roaster is fully on the fly
  285. programmable from the Amiga therefore allowing the "Hardware" configuration
  286. to be changed.  The Video Roaster will incorporate support for dynamically
  287. scaleable Picture in Picture as well as the Redirect Address Design (RAD).
  288. The Video Roaster Chip is a fully intergrated part of the OpalVision system
  289. and is therefore fully compatible with all other modules of the OpalVision
  290. system.  For effective use, the Video Roaster Chip and software requires
  291. the Genlock and Frame Grabber Module.
  292.  
  293.  
  294. 5.0    FUNCTIONAL DESCRIPTION VIDEO COMMUNICATION
  295.  
  296. The OpalVision communicates with video at several different levels.  In its
  297. basic implementation the OpalVision is an output device with the ability to
  298. switch between Amiga and OpalVision video on a pixel by pixel basis.  While
  299. inactive, the OpalVision simply passes through all Amiga graphics.  While
  300. active the OpalVision has several modes which control the signal priority
  301. on a pixel by pixel basis and provide palette and lookup table effects on
  302. all output information.
  303.  
  304. With the addition of the Frame Grabber + Genlock module the OpalVision
  305. becomes an input device with the ability to synchronize to a video signal,
  306. digitize at full frame rate and overlay Amiga and OpalVision graphics from
  307. Composite, RGB and SVHS sources.  This provides several different paths for
  308. video information to follow as illustrated in the OpalVision System Flow
  309. Diagram.
  310.  
  311. With the aid of the genlock and linear keyer, OpalVision graphics may be
  312. overlaid on live video with either pixel by pixel variable transparency or
  313. mixed Amiga and OpalVision graphics.  Alternatively the live video may be
  314. digitized then displayed through the OpalVision Mother board with stencil
  315. priority and lookup table effects.  With the addition of the OpalVision
  316. Video Roaster Chip much more complex live video effects are possible.  The
  317. OpalVision unit functions in a synchronous manner for all functions except
  318. when using Video Roaster special effects.  The Video Roaster effects induce
  319. a 1 field delay on to the signal this is the time required to implement a
  320. pixel remap.
  321.  
  322. 6.0    DIGITAL COMMUNICATION
  323.  
  324. The OpalVision receives its instructions and 24 bit data through the
  325. Amiga's 4 bit digital video output port.  The Amiga is capable of outputing
  326. a maximum of 4 bits per Amiga pixel through this port.  8 bits of data is
  327. obtained by pairing up two 4 bit hi-res pixels side by side.  This 8 bit
  328. data is then used by OpalVision as information for the CoPro, palette, or
  329. as an 8 bit per pixel update to the red, green or blue bank of 24 bit
  330. display memory.
  331.  
  332. An activation control code must be present at the top of the Amiga display
  333. in the invisible overscan region of the screen to activate the OpalVision.
  334. All palette and CoPro updates are performed in the 3 scan lines following
  335. this code.
  336.  
  337. Screen information is output to the OpalVision by a series of standard
  338. Amiga hi-res 4 bit screens.  8 bits per lo-res pixel is updated to the
  339. OpalVision by each Amiga screen.
  340.  
  341. The OpalVision was designed to interface as closely as possible into the
  342. Amiga display architecture, philosophy, and environment.  All of the
  343. benefits of the Amiga Intuition, Copper, Blitter and display hardware can
  344. be utilized to provide high speed screen updates, a variety of display
  345. modes, width control and effects to use on the 24 bit OpalVision graphics.
  346.  
  347. You must have at least 8 bits of a 24 bit image residing in Amiga Chip RAM
  348. at a time to update a full 24 bit image into the OpalVision Memory.
  349.  
  350. Memory Updates to the OpalVision are a continuous 5.5 megabytes per second.
  351. Using the copper and blitter, certain effects may be performed considerably
  352. faster than using the bus based C.P.U.
  353.  
  354. The OpalVision memory and frame grabbed data is read back to the Amiga
  355. through the parallel port available on the video slot.
  356.  
  357.  
  358. See OpalVision System Flow Diagram OpalVision Programmers Tecnical 
  359. Reference Manual 1.2 Page No. 11 
  360.  
  361.  
  362. 7.0    COLOUR MODES 
  363.  
  364. 7.1    24Bit Mode
  365.  
  366. 24Bit mode provides 24bits of information per pixel, 8bits of red, green
  367. and blue.  There are two distinct ways in which this information may be
  368. dealt with, palette mapped or non palette mapped.
  369.  
  370. In palette mapped mode, each 8bit value (for red, green and blue) is used
  371. as an index into a 256 entry 8bit palette.  There are separate palette
  372. tables for each of the primary colours.  The 8bit data is ANDed with the
  373. pixel read mask prior to accessing the palette.
  374.  
  375. In non palette mapped mode, information is sent from memory directly to the
  376. display hardware by-passing the palette and the pixel read mask.
  377.  
  378. 7.2    8Bit Modes
  379.  
  380. 8Bit mode provides 8bits of data per display pixel.  There are two distinct
  381. ways in which this information may be dealt with, palette mapped or non
  382. palette mapped.
  383.  
  384. In palette mapped mode, each 8bit is used as an index into a 256 entry
  385. 24bit palette.  This allows 256 colours from a palette of 16.8 million.  In
  386. this mode the 8bit information is ANDed with the pixel read mask prior to
  387. entering the palette.
  388.  
  389. In non palette mapped mode, the 8bit information for each pixel is divided
  390. into 3bits of red, 3bits of green and 2bits of blue.  This produces an
  391. absolute 8bit colour value for each pixel.
  392.  
  393. 7.3    15Bit Mode
  394.  
  395. Unlike the 24bit and 8bit modes, 15bit mode is only available in non
  396. palette mapped form.  15Bit mode is not subject to the pixel read mask.
  397. 15Bit mode uses 5 bits of red, green and blue.
  398.  
  399.  
  400. 7.4    Colour Mode Selection
  401.  
  402. The OpalVision colour modes are selected by combinations of the S1, S0 bits
  403. in the CoPro and CR7 and CR6 bits in the Video Command Register.
  404.  
  405. +----+----+-----+-----+--------------+---------+---------+---------+
  406. | S1 | S0 | CR7 | CR6 |     Mode     |  R7-R0  |  G7-G0  |  B7-B0  |
  407. +----+----+-----+-----+--------------+---------+---------+---------+
  408. | 0  | 0  |  0  |  0  |24Bit PMapped |  R7-R0  |  G7-G0  |  B7-B0  |
  409. | 0  | 0  |  0  |  1  |24Bit PMapped |  R7-R0  |  G7-G0  |  B7-B0  |
  410. | 0  | 0  |  1  |  0  |24Bit PMapped |  R7-R0  |  G7-G0  |  B7-B0  |
  411. | 0  | 0  |  1  |  1  |Reserved      |Reserved |Reserved |Reserved |
  412. +----+----+-----+-----+--------------+---------+---------+---------+
  413. | 0  | 1  |  0  |  0  |24Bit By-Pass |  R7-R0  |  G7-G0  |  B7-B0  |
  414. | 0  | 1  |  0  |  1  |24Bit By-Pass |  R7-R0  |  G7-G0  |  B7-B0  |
  415. | 0  | 1  |  1  |  0  |24Bit By-Pass |  R7-R0  |  G7-G0  |  B7-B0  |
  416. | 0  | 1  |  1  |  1  |Reserved      |Reserved |Reserved |Reserved |
  417. +----+----+-----+-----+--------------+---------+---------+---------+
  418. | 1  | 0  |  0  |  0  |8Bit PM Red   |  P7-P0  |Ignored  |Ignored  |
  419. | 1  | 0  |  0  |  1  |8Bit PM Green |Ignored  |  P7-P0  |Ignored  |
  420. | 1  | 0  |  1  |  0  |8Bit PM Blue  |Ignored  |Ignored  |  P7-P0  |
  421. | 1  | 0  |  1  |  1  |Reserved      |Reserved |Reserved |Reserved |
  422. +----+----+-----+-----+--------------+---------+---------+---------+
  423. | 1  | 1  |  0  |  0  |8Bit RGB Red  |RRRGGGBB |Ignored  |Ignored  |
  424. | 1  | 1  |  0  |  1  |8Bit RGB Green|Ignored  |RRRGGGBB |Ignored  |
  425. | 1  | 1  |  1  |  0  |8Bit RGB Blue |Ignored  |Ignored  |RRRGGGBB |
  426. | 1  | 1  |  1  |  1  |15Bit RGB     |XRRRRRGG |GGGBBBBB |Ignored  |
  427. +----+----+-----+-----+--------------+---------+---------+---------+
  428.  
  429.  
  430. 8.0    STENCIL MODES
  431.  
  432. OpalVision supports two different stencils which may function independently
  433. or together.  These stencils are described below.
  434.  
  435. 8.1    Playfield Stencil
  436.  
  437. The playfield stencil provides pixel by pixel display priority between two
  438. screens currently in the frame buffer.  This is made active by selecting
  439. the Dual Playfield mode.  This mode is especially useful for fast dynamic
  440. transitions between OpalVision screens.  Dual Playfield mode is completely
  441. independent of Priority mode and the two may be freely combined.  This
  442. function is available in low resolution only.  The Dual_Play control line
  443. register bit enables the playfield stencil as shown below.
  444.  
  445. +-------------------+-----------+------+-----------------------+
  446. | PlayField Stencil | Dual_Play | Bank | Memory Bank Dispalyed |
  447. +-------------------+-----------+------+-----------------------+
  448. |      Ignored      |     0     |   0  |            1          |
  449. |      Ignored      |     0     |   1  |            2          |
  450. |         0         |     1     |   0  |            1          |
  451. |         0         |     1     |   1  |            2          |
  452. |         1         |     1     |   0  |            2          |
  453. |         1         |     1     |   1  |            1          |
  454. +-------------------+-----------+------+-----------------------+
  455.  
  456.  
  457. 8.2    Priority Stencil
  458.  
  459. Priority mode controls display priority between OpalVision and Amiga
  460. graphics on a pixel by pixel basis.  There are several forms in which this
  461. mode functions.  These are described below.
  462.  
  463. +----------+-------+----------+-----------+-------------+--------------+
  464. | Priority | Prior | Priority | Dual_Disp | Transparent | Actual Video |
  465. | Stencil  | Mode  |          |           |    Colour   |   Display    |
  466. +----------+-------+----------+-----------+-------------+--------------+
  467. |  Ignored |   0   |    0     |     0     |   Amiga 0   | Amiga on Opal|
  468. |  Ignored |   0   |    0     |     1     |    None     | Amiga Only   |
  469. |  Ignored |   0   |    1     |     0     | OpalVision 0| Opal on Amiga|
  470. |  Ignored |   0   |    1     |     1     |    None     | Opal Only    |
  471. |     0    |   1   | Ignored  |     0     |   Amiga 0   | Amiga on Opal|
  472. |     0    |   1   | Ignored  |     1     |    None     | Amiga Only   |
  473. |     1    |   1   | Ignored  |     0     | OpalVision 0| Opal on Amiga|
  474. |     1    |   1   | Ignored  |     1     |    None     | Opal Only    |
  475. +----------+-------+----------+-----------+-------------+--------------+
  476.  
  477. The four control bits described above are situated in the CoPro register
  478. and can be updated on every scan line.  The Priority Stencil is completely
  479. independent to the Playfield stencil and the two may be freely mixed.  This
  480. mode is available in all resolutions.
  481.  
  482. Resolutions OpalVision resolutions exactly matches Amiga low and high
  483. resolutions in both interlaced and non interlaced displays.  This
  484. simplifies the use of Amiga/OpalVision stencil modes.  All colour modes are
  485. available in all resolutions.
  486.  
  487. OpalVision automatically configures for either PAL or NTSC.  It is
  488. essential therefore that all software should auto configure for PAL and
  489. NTSC.  And this can be done by opening all windows and screens using the
  490. size specified in GfxBase -> NormalDisplayRows, and when positioning
  491. gadgets at the bottom of the screen, do so by making them relative to the
  492. bottom of the screen by setting the GRELBOTTOM.  Special consideration must
  493. be given to the limited screen resolution available in NTSC.
  494.  
  495. 9.0    MEMORY STRUCTURE
  496.  
  497. OpalVision memory is divided into two Banks and in turn each bank is
  498. divided into two fields.  Each field is also divided into three regions one
  499. each for Red, Green and Blue.  Interlaced pictures must be stored in
  500. adjacent fields.  In non interlaced modes, these fields may be used to
  501. store separate images.  In low resolution non-interlaced each of the four
  502. fields (Banks 1 and 2) can hold complete images.  In low resolution
  503. interlaced both fields are required for each full picture therefore two
  504. complete images may be stored, one in each bank.  In high resolution non
  505. interlaced, one bank is required for each picture allowing the storage of
  506. two complete pictures.  Finally in high resolution interlaced, only one
  507. picture can reside in the OpalVision memory at a given time.
  508.  
  509. Writing to the rams is controlled by the FIELD, RWR1, GWR1, BWR1, RWR2,
  510. GWR2 and BWR2 bits situated in the control line register.  These bits are
  511. active high.  Bits in the control line register are not mutually exclusive
  512. and may be used in any combination therefore multiple banks may be written
  513. with the same information simultaneously.  This is most useful for memory
  514. initialization type operations.  By the same token, it is possible to write
  515. to one bank while displaying another.  This feature is especially useful
  516. for double buffered animation.  Note however that it is not possible to
  517. write to one field while displaying the other field.
  518.  
  519. In total there are 12 regions of memory which may be independently
  520. accessed, these are referred to as segments in this document..
  521.  
  522. Memory Segment Diagram 
  523.  
  524.  
  525.                            RWR1           GWR1           BWR1
  526.                      +--------------+--------------+--------------+
  527.                      |              |              |              |
  528.            Field = 0 |     128K     |     128K     |     128K     |
  529.                      |              |              |              |
  530. BANK = 0             +--------------+--------------+--------------+
  531.                      |              |              |              |
  532.            Field = 1 |     128K     |     128K     |     128K     |
  533.                      |              |              |              |
  534.                      +--------------+--------------+--------------+
  535.                            
  536.                            Red            Green          Blue
  537.    
  538.                      +--------------+--------------+--------------+
  539.                      |              |              |              |
  540.            Field = 0 |     128K     |     128K     |     128K     |
  541.                      |              |              |              |
  542. BANK = 1             +--------------+--------------+--------------+
  543.                      |              |              |              |
  544.            Field = 1 |     128K     |     128K     |     128K     |
  545.                      |              |              |              |
  546.                      +--------------+--------------+--------------+
  547.                            RWR2           GWR2           BWR2
  548.  
  549.  
  550.  
  551. In low resolution non interlaced mode, picture information is stored in
  552. sequential form in one field.
  553.  
  554. In interlaced modes sequential horizontal lines are stored in alternate
  555. memory fields as explained by the diagram.
  556.  
  557. Interlaced
  558.         +-------------------------------+
  559.         |OOOOOOOOOOOOOOOOOOOOOOOOO      |
  560.         |XXXXXXXXXXXXXXXXXXXXXXX        |
  561.         |OOOOOOOOOOOOOOOOOOOOO          |
  562.         |XXXXXXXXXXXXXXXXXXX            |
  563.         |                               |
  564.         |                               |
  565.         |                               |
  566.         |                               |
  567.         |                               |
  568.         |                               |
  569.         |                               |
  570.         |                               |
  571.         |                               |
  572.         |                               |
  573.         +-------------------------------+
  574.  
  575.     OO = Even Field
  576.     XX = Odd Field
  577.  
  578.  
  579. In high resolution modes, sequential pixels along each horizontal line are
  580. situated in alternate banks.
  581.  
  582. High Resolution
  583.  
  584.         +-------------------------------+
  585.         |XOXOXOXOXOXOXOXOXOXOXOXOXOXO   |
  586.         |XOXOXOXOXOXOXOXOXOXOXOXOXO     |
  587.         |XOXOXOXOXOXOXOXOXOXOXOX        |
  588.         |XOXOXOXOXOXOXOXOXOXOX          |
  589.         |                               |
  590.         |                               |
  591.         |                               |
  592.         |                               |
  593.         |                               |
  594.         |                               |
  595.         |                               |
  596.         |                               |
  597.         |                               |
  598.         |                               |
  599.         +-------------------------------+
  600.     
  601.     X = BANK 0
  602.     O = BANK 1
  603.  
  604. When high resolution and interlaced modes are selected at the same time,
  605. both these effects must be considered.  Therefore sequential horizontal
  606. pixels are situated in alternating banks and sequential Horizontal lines
  607. are situated in alternating fields.
  608.  
  609. The library provides a full compliment of memory format conversion routines
  610. to simplify the management of the OpalVision display memory and to convert
  611. between the different graphics memory configurations found on the Amiga.
  612.  
  613.  
  614. 10.0    REGISTERS
  615.  
  616. 10.1    The Opal Control Line Register
  617.  
  618. The Opal Control Line Register must be present to activate the OpalVision
  619. display.  The Control Line Register provides control for memory write,
  620. display activation and auto display modes.  It's Consists of 20 bits which
  621. are embedded in the first scan line of every Valid OpalVision frame.
  622.  
  623. +------+------------+-------------------------------------------+------------+
  624. | Bit# |  Name      |Description                                |Active State|
  625. +------+------------+-------------------------------------------+------------+
  626. |  19  |*Freeze     | Frame Freezes Current frame in SRC        |      1     |
  627. |  18  |**VLSI_PROG | Program the Roaster chip if present.      |      1     |
  628. |  17  |BWR2 Enable | Blue Video RAM write Bank 2               |      1     |
  629. |  16  |BWR1 Enable | Blue Video RAM write Bank 1               |      1     |  
  630. |  15  |GWR2 Enable | Green Video RAM write Bank 2              |      1     |
  631. |  14  |GWR1 Enable | Green Video RAM write Bank 1              |      1     |
  632. |  13  |RWR2 Enable | Red Video RAM write Bank 2                |      1     | 
  633. |  12  |RWR1 Enable | Red Video RAM write Bank 1                |      1     |
  634. |  11  |FGrab Enable| Frame Grabbing to Video RAM               |      1     |
  635. |  10  |Latch       | Latch On OpalVision display               |      1     |
  636. |   9  |Field_Mode  | Enable Auto Field Display Toggle          |      1     |
  637. |   8  |FIELD       | Field Toggle value                        |      X     |
  638. |   7  |Dual_Play   | Dual OpalVision Playfield stencil enable  |      1     |
  639. |   6  |AUTO Enable | Auto Line Start Sync                      |      0     |
  640. |   5  |COL/CoPro   | Selects Palette update or CoPro Update    |      X     |
  641. |   4  |WREN        | Address Select for Register Updates       |      X     |
  642. |   3  |Valid_3     | Valid OpalVision Activation Code          |      0     |
  643. |   2  |Valid_2     | Valid OpalVision Activation Code          |      1     |
  644. |   1  |Valid_1     | Valid OpalVision Activation Code          |      0     |
  645. |   0  |Valid_0     | Valid OpalVision Activation Code          |      1     |
  646. +------+------------+-------------------------------------------+------------+
  647.  
  648. *Available only when the Scan Rate Converter module is present.  **Function
  649. for Live Video Manipulation Chip.  
  650.  
  651. **Available only when Roaster Chip is present.
  652.  
  653.  
  654. 10.2    The CoPro
  655.  
  656. The OpalVision CoPro is a sequential processor which allows control of
  657. OpalVision display modes on a line by line basis.  This is especially
  658. suited to transition effects like slides and wipes, between live and Amiga
  659. video.  The Coprocessor offers the following control information on every
  660. display line .  There are 290 available instructions in the CoPro list, one
  661. for each line of the display.
  662.  
  663.  
  664. +------+------------+-------------------------------------------+------------+
  665. | Bit# |  Name      |Description                                |Active State|
  666. +------+------------+-------------------------------------------+------------+
  667. |  7   | Add_Load   | Re-load the address registers.            |      0     |
  668. |  6   | Prior_Mode | Amiga/OpalVision priority stencil enable. |      1     |
  669. |  5   | Priority   | Amiga/OpalVision priority.                |      X     |
  670. |  4   | Dual_Disp  | Mix Amiga/OpalVision graphics.            |      0     |
  671. |  3   | Lo/Hi      | Hi resolution enable.                     |      1     | 
  672. |  2   | Bank       | Video ram display bank selector           |      X     |
  673. |  1   | S1         | Video display mode bit 1                  |      X     | 
  674. |  0   | S0         | Video display mode bit 0                  |      X     |
  675. +------+------------+-------------------------------------------+------------+
  676.  
  677.  
  678. 10.3    Palette Registers
  679.  
  680. The OpalVision unit has a separate 256 entry palette for red, green and
  681. blue.  This palette may be configured in two different ways.
  682.  
  683. In 8bit palette mapped mode, it is organized as 256 24bit registers.  This
  684. is a standard palette configuration.
  685.  
  686. In 24bit palette mapped mode, the palette acts as three separate 8bit
  687. remap tables.  These are especially useful for gamma correction, contrast
  688. stretching, negatives and smooth fades.
  689.  
  690. All palette entries can easily be accessed through the library.
  691.  
  692. 10.4    Pixel Read Mask Register
  693.  
  694. The Pixel Read Mask Register is situated between video memory and the
  695. palette registers.  The Pixel read mask is 8bits wide and is applied to
  696. red, green, blue or 8bit data prior to its entering the palette.  This
  697. facility is available only in palette mapped modes.  The same mask value is
  698. applied to all data paths.
  699.  
  700. 10.5    Address Load Register
  701.  
  702. The Address load Register is a 17bit register which can be loaded into the
  703. video address counters.  Each address is equal to a low res pixel size.
  704. and there are 371 address counts per line.  This value is independent of
  705. both the resolution of the Amiga or the OpalVision.  Therefore scrolling
  706. the screen down one line may be achieved by simply adding 371 to the value.
  707. The value in this register is not loaded until a clear Add_Load bit in the
  708. CoPro register is encountered.
  709.  
  710. 10.6    Video Command Register
  711.  
  712. The Command register contains colour mode control bits.  And output
  713. standard information.
  714.  
  715. +------+------------+-------------------------------------------+------------+
  716. | Bit# |  Name      |Description                                |Active State|
  717. +------+------------+-------------------------------------------+------------+
  718. |  7   |CR7         | Colour Mode Select.  See Video Mode Table |      X     |
  719. |  6   |CR6         | Colour Mode Select.  See Video Mode Table |      X     |
  720. |  5   |Setup       | Specifies 0 IRE or 7.5 IRE Pedestal use 0 |      0     |
  721. |  4   |8/6         | Selects between 6 (0) and 8 (1) bit mode  |      1     |
  722. |  3   |Reserved    | Keep Low                                  |      1     |
  723. |  2   |Reserved    | Keep Low                                  |      1     |
  724. |  1   |VLSI_AD1    | *Ram Bank 1 address replace.              |      1     |
  725. |  0   |VLSI_AD0    | *Ram Bank 0 address replace.              |      1     |
  726. +------+------------+-------------------------------------------+------------+
  727.  
  728.     *Functions for the Live Video Manipulation Chip (The Roaser).
  729.  
  730. 10.7    Palette Load Register
  731.  
  732. The Palette Load register is an 8bit register which is used to offset the
  733. palette updates.  This makes it possible for the palette data to be shifted
  734. by the given amount for simple colour cycling effects.  This register is
  735. normally 0.
  736.  
  737.  
  738. 10.8    The Video Roaster Chip
  739.  
  740. The Video Roaster Chip is a reconfigurable hardware device which can be
  741. programmed from the Amiga.  The Roaster is situated between the address
  742. counters and the memory address lines.  This allows the roaster to redirect
  743. pixel information from any part of memory to any screen location.  The
  744. Video Roaster requires the Frame Grabber and Genlock module to function.
  745.  
  746. There will be atleast two different modules which take advantage of this
  747. capability these are the Picture in Picture module (PIP) and the Redirect
  748. Address Design module (RAD) These modules can only be used one at a time as
  749. they require the dedicated attention of the Roaster Chip.
  750.  
  751.  
  752. 11.0    THE LIBRARY
  753.  
  754. 11.1    The Opalscreen Structure
  755.  
  756. The library deals with OpalVision screens.  These screens can contain 8, 15
  757. and 24 bitplanes.  Each screen is described by an OpalScreen structure.
  758. The contents of this structure is shown below.
  759.  
  760. struct OpalScreen
  761.         { SHORT Width;
  762.            SHORT Height;
  763.            SHORT Depth;
  764.             SHORT ClipX1, ClipY1;
  765.             SHORT ClipX2, ClipY2;
  766.            SHORT BytesPerLine;
  767.            UWORD Flags;
  768.            SHORT RelX;
  769.            SHORT RelY;
  770.            struct MsgPort *UserPort;
  771.            SHORT MaxFrames;
  772.            SHORT VStart;
  773.            SHORT CoProOffset;
  774.            SHORT LastWait;
  775.            UWORD LastCoProIns;
  776.            UBYTE *BitPlanes[24];
  777.            UBYTE *MaskPlane;
  778.            ULONG AddressReg;
  779.            UBYTE UpdateDelay;
  780.            UBYTE PalLoadAddress;
  781.            UBYTE PixelReadMask;
  782.            UBYTE CommandReg;
  783.            UBYTE Palette[3*256];
  784.            UBYTE Pen_R;
  785.            UBYTE Pen_G;
  786.            UBYTE Pen_B;
  787.            UBYTE Red;
  788.            UBYTE Green;
  789.            UBYTE Blue;
  790.            UBYTE CoProData [MAXCOPROINS];
  791.            SHORT Modulo;
  792.            UBYTE Reserved [38];
  793.         };
  794.  
  795. The fields have the following meanings:
  796.  
  797. Width
  798.  
  799. The width of the screen in pixels.  This can be specified if the screen was
  800. created  using  CreateScreen24() or this value will be set automatically if
  801. opened using OpenScreen24().
  802.  
  803. Height
  804.  
  805. The height of the screen in lines.  This can be specified if the screen was
  806. created  using  CreateScreen24() or this value will be set automatically if
  807. opened  using  OpenScreen24().   When  OpenScreen24() is used the number of
  808. lines  depends on whether the machine is running in NTSC or PAL and also on
  809. the amount of available chip ram.
  810.  
  811. Depth
  812.  
  813. The  number  of bitplanes in the screen.  This value is set when the screen
  814. is opened or created.
  815.  
  816. ClipX1, ClipY1, ClipX2, ClipY2 
  817.  
  818. These variables define the clipping region used by the drawing routines.
  819. The actual region is defined as ClipX1 <= x < ClipX2 and ClipY1 <= x <
  820. ClipY2.
  821.  
  822. BytesPerLine 
  823.  
  824. This defines the screen width in bytes.  This value is not always width/8
  825. and depends on the resolution of the screen.
  826.  
  827. Flags
  828.  
  829. These flags may be specified when the screen is first opened using either
  830. OpenScreen24() or CreateScreen24().
  831.  
  832. These flags are:
  833.  
  834. HIRES24 Screen is in high resolution mode (640 pixels across).  The default
  835. is 320 pixels across.
  836.  
  837. ILACE24 Screen is in interlaced mode.  (512 lines for PAL , 400 lines for
  838. NTSC).  The default is 256 lines for PAL and 200 lines for NTSC.
  839.  
  840. OVERSCAN24 Screen is in an overscan mode.  This is 368 pixels wide in low
  841. resolution or 736 pixels wide in high resolution.  The number of lines in
  842. PAL is 286 non interlaced or 576 interlaced and in NTSC there are 236 lines
  843. in non interlaced or 476 lines interlaced.
  844.  
  845. PLANES8 Screen has 8 bitplanes.
  846.  
  847. PLANES15 Screen has 15 bitplanes.
  848.  
  849. CLOSEABLE24 The screen can be closed by a higher priority task (display
  850. screen only).
  851.  
  852. PALMAP24 Screen is in palette mapped mode.
  853.  
  854. CONTROLONLY24 This flag can be used to activate the OpalVision to allow
  855. updating of the internal registers only.
  856.  
  857.  
  858. The following flags are set by the library and are not user definable:
  859.  
  860. NTSC24 Screen is in NTSC mode.  Default is PAL.
  861.  
  862. INCHIP24 Screen is a display screen in chip ram.
  863.  
  864.  
  865.  
  866. RelX, RelY 
  867.  
  868. These variables provide a relative drawing origin which is used
  869. by the drawing routines.  These values are simply added to the input
  870. coordinates of drawing routines.
  871.  
  872. UserPort 
  873.  
  874. This is a message port opened specifically for the screen.  In
  875. this version of the library this is only used for close down messages to
  876. tasks which have opened a screen with the CLOSEABLE24 flag set.
  877.  
  878. MaxFrames 
  879.  
  880. This field is set when the screen is opened and defines how many
  881. screens of this resolution may be held in frame buffer memory.
  882.  
  883. VStart 
  884.  
  885. This field is set when the screen is opened and defines the starting
  886. scan line of the screen.  This is normally defined in preferences or is
  887. given a default value for overscan screens.  This value is useful for
  888. building user copper lists.
  889.  
  890. CoProOffset 
  891.  
  892. This field is set when the screen is opened and defines the
  893. CoPro instruction number corresponding to the first scan line in the
  894. display.
  895.  
  896. LastWait 
  897.  
  898. This field contains the scan line number of the last vertical
  899. position wait for a display copper list.  Normally this is the top of the
  900. display, but must be updated if copper lists are added to the display lists
  901. using the AppendCopper24() function.
  902.  
  903. LastCoProIns 
  904.  
  905. This field defines the last CoPro instruction which can be
  906. modified.  Normally this is MAXCOPROINS, however it will be less than this
  907. if a display bottom has been set.
  908.  
  909. BitPlanes 
  910.  
  911. This field is an array of pointers to the bitplanes for the
  912. screen which will contain 4, 8, 12, 16 or 24 entries.
  913.  
  914. MaskPlane 
  915.  
  916. This can point to a single bitplane mask plane which is allocated
  917. if LoadImage24() loads a file which contains a mask plane and the LOADMASK24
  918. flag is set.  Likewise this plane is saved in the file if the SaveIFF24()
  919. function is called with the SAVEMASK24 flag set.
  920.  
  921. AddressReg 
  922.  
  923. This field holds a copy of the Address Load Register in the
  924. OpalVision.  Values written to this register are not updated in the
  925. OpalVision until SetLoadAddress24() is called.
  926.  
  927. UpdateDelay 
  928.  
  929. This field defines the number of frames to wait between
  930. consecutive frame buffer updates.  This field should not be set directly
  931. but set using a call to UpdateDelay24().
  932.  
  933. PalLoadAddress 
  934.  
  935. This field holds a copy of the Palette Load Address Register
  936. in the OpalVision.  Values written to this register are not updated in the
  937. OpalVision until RegUpdate24() is called.
  938.  
  939. PixelReadMask 
  940.  
  941. This field holds a copy of the PixelReadMask Register in the
  942. OpalVision.  Values written to this register are not updated in the
  943. OpalVision until RegUpdate24() is called.
  944.  
  945. CommandReg 
  946.  
  947. This field holds a copy of the Command Register in the
  948. OpalVision.  Values written to this register are not updated in the
  949. OpalVision until RegUpdate24() is called.
  950.  
  951. Palette 
  952.  
  953. This contains a copy of the OpalVision's internal palette.  The
  954. palette consists of 256 entries of Red, Green and Blue triplets.  Values
  955. written into the palette will not be updated in the OpalVision until
  956. UpdatePalette24() is called.
  957.  
  958. Pen_R, Pen_G, Pen_B 
  959.  
  960. These three fields hold the current pen value used by
  961. the drawing routines.  For 24bit screens all three are used, while in 15bit
  962. screens only Pen_R and Pen_G are used and in 8bit mode only Pen_R is used.
  963. Macros are defined in Opallib.h to simplify setting pen values.
  964.  
  965. Red, Green, Blue 
  966.  
  967. These three fields contain the return values from
  968. ReadPixel24().  For 24bit screens all three are used, while in 15bit
  969. screens Red and Green are used and in 8bit mode only Red is used.  Macros
  970. are defined in Opallib.h to simplify getting these values.
  971.  
  972. CoProData 
  973.  
  974. This array holds a copy of the CoPro instructions in the
  975. OpalVision.  Values written into this array are not updated in the
  976. OpalVision until UpdateCoPro24() called.
  977.  
  978. Modulo 
  979.  
  980. This field holds the line width in pixels used for the 24 bit
  981. display, this value is a constant independent of display resolution.  This
  982. value is required for calculating addresses to place in the address
  983. register.  This value is different for the ColorBurst and the OpalVision.
  984.  
  985. Reserved 
  986.  
  987. Reserved for future expansion.
  988.  
  989.  
  990. 11.2    Types of Opalscreens
  991.  
  992. There are two types of OpalScreens.  The display screen is the main screen
  993. which is opened using the OpenScreen24() function.  All library calls are
  994. applicable to the display screen which can be used to update the frame
  995. buffer memory and is hence displayable.  The display screen's bitplanes
  996. must reside in chip ram and its size may therefore be restricted by the
  997. available chip memory.
  998.  
  999. Virtual OpalScreens can be opened using the CreateScreen24() function.
  1000. These screens reside in fast ram and therefore cannot be directly
  1001. displayed.  Virtual screens are more flexible than display screens in that
  1002. they can be opened in any size (memory permitting).  Virtual screens are
  1003. useful for file conversion, image processing or implementing virtual screen
  1004. support where a large image is stored in fast ram and a smaller scrollable
  1005. display window is held in chip ram.
  1006.  
  1007. The fields in the OpalScreen structure pertaining to display attributes,
  1008. such as the palette, CoPro instructions and registers are ignored for
  1009. virtual screens.  Library functions pertaining to display modes cannot be
  1010. used for virtual screens and normally do not take an OpalScreen parameter
  1011. implying that they operate on the display screen.
  1012.  
  1013. Display screens can also be opened as low priority closeable screens by
  1014. setting the CLOSEABLE24 flag when opening a screen.  If another task tries
  1015. to open a display screen, a message will be sent to the screens message
  1016. port requesting that it be closed to enable the other task to open its
  1017. screen.  This is useful for backdrop type programs.  An example of using a
  1018. closeable screen is given below, note that the screen MUST be closed before
  1019. the message is replied to.
  1020.  
  1021.     OScrn = OpenScreen24 (CLOSEABLE24);
  1022.     if (OScrn!=NULL)
  1023.         { WaitPort (OScrn->UserPort);
  1024.            CloseScreen24();
  1025.            Mesg = GetMsg (OScrn->UserPort);
  1026.            ReplyMsg (Mesg);
  1027.         }
  1028.  
  1029. Virtual screens can be displayed indirectly using the LowMemUpdate24()
  1030. function, this function updates the buffer one segment at a time and
  1031. therefore only requires one segment of data to be in chip memory.  If you
  1032. only require one off updates of the buffer, this method is strongly
  1033. recommended as it does not suffer from chip ram limitations.
  1034.  
  1035. 11.3    Drawing Routines
  1036.  
  1037. All drawing routines are applicable to both types of OpalScreens and take a
  1038. screen pointer to define which OpalScreen is used.  Within the screen
  1039. structure there are several fields which apply only to drawing.  The
  1040. ClipX1, ClipY1 and the ClipX2, ClipY2 fields define an absolute clipping
  1041. rectangle defining the allowable drawing area.  Pixels outside of this
  1042. rectangle will be unaffected.  The clipping rectangle is initialized to the
  1043. size of the screen when it is created.
  1044.  
  1045.  
  1046. The RelX, RelY fields define the origin of the drawing coordinate system.
  1047. This is initialized to 0 when the screen is opened.
  1048.  
  1049. The drawing routines use the Pen_R, Pen_G and Pen_B fields of the screen
  1050. structure to define the colour used for drawing.  In 24bit mode the three
  1051. values contain 8bits of red, green and blue.  In 8bit mode, Pen_R contains
  1052. the 8bit value to be written.  In 15bit mode the Pen_R and Pen_G contain 5
  1053. bits of red, green and blue compressed together as shown below.
  1054.  
  1055.         Pen_R Pen_G 15bit Pen value 0RRRRRGG GGGBBBBB
  1056.         8bit true colour pen value RRRGGGBB
  1057.  
  1058. To simplify writing pen values, the following four macros are defined in
  1059. Opallib.h:
  1060.  
  1061.         SetPen24 (Screen, R,G,B) - Set 24bit pen
  1062.     SetPen15 (Screen, R,G,B) - Set 15bit pen
  1063.     SetPen8P (Screen, Pen)   - Set 8bit Palette mapped pen.
  1064.     SetPen8  (Screen, R,G,B) - Set 8bit true colour pen.
  1065.  
  1066. Similarly the values returned by ReadPixel24() are returned in the Red,
  1067. Green, Blue fields of the OpalScreen structure in the same format.  To get
  1068. the components of the returned value the following macros can be used.
  1069.  
  1070.     GetCol24 (Screen, R,G,B) - Get 24bit colour.
  1071.     GetCol15 (Screen, R,G,B) - Get 15bit colour.
  1072.     GetCol8P (Screen, Pen)   - Get 8bit Palette mapped pen number.
  1073.         GetCol8 (Screen, R,G,B)  - Get 8bit colour. 
  1074.  
  1075. 11.4    Frame Buffer Updating
  1076.  
  1077. When instructed the library updates the frame buffer with the contents of
  1078. the current display screen.  Making any changes to the current screen
  1079. visible.  The library allows two different methods for updating the frame
  1080. buffer.  The first method is to make the changes that you wish to the
  1081. display screen in memory and then call Refresh24() which will refresh the
  1082. frame buffer in the minimum number of frames required for that resolution,
  1083. stops updates and then returns.  This form of updating has the nice side
  1084. effect of providing inherent double buffering.
  1085.  
  1086. The second method is to allow continuous updating of the frame buffer which
  1087. is performed transparently by the library.  This mode is enabled by calling
  1088. UpdateDelay24() which also allows for a delay parameter to be specified
  1089. which sets a frame delay between consecutive updates.  StopUpdate24() can
  1090. be used to cease updating.  Note that while frame buffer updates are
  1091. occurring the CPU access to chip ram will be limited, the frame delay
  1092. between buffer updates gives the CPU a little breathing room and will
  1093. increase CPU throughput .  
  1094.  
  1095.  
  1096. 11.5    Logical Frames
  1097.  
  1098. Frame buffer memory can contain several images depending on the resolution
  1099. and display mode.  The library divides the frame buffer memory into a
  1100. number of logical frames to ease the task of writing several frames into
  1101. the buffer.  The frame to be updated is set by calling WriteFrame24() and
  1102. the current display frame is set by calling DisplayFrame24().  The maximum
  1103. number of frames possible is given by the MaxFrames field in the OpalScreen
  1104. structure.
  1105.  
  1106. The following tables show the assignments of logical frames to physical
  1107. memory segments.
  1108.  
  1109. Table:  Frame Assignments in 15 and 24 Bit Modes
  1110.  
  1111. Resolution Frame Number
  1112.  
  1113. Table:  Frame Assignments in 8Bit Mode
  1114.  
  1115.  
  1116.  
  1117. The following information contains terms which should be understood clearly
  1118. for an effective understanding of the OpalVision's operating modes.  It is
  1119. worth spending a moment to understand the characteristics and differences
  1120. between a Dual Display and Dual Playfield as well as the Priority Stencil
  1121. and the Playfield Stencil.  Dual Display Mode The OpalVision can operate in
  1122. a dual display mode.  When activated, this enables both Amiga and
  1123. OpalVision graphics to be visible on the same screen.  The priority of the
  1124. display can also be set to enable either Amiga over OpalVision or
  1125. OpalVision over Amiga.  This mode enabled by calling DualDisplay24() and
  1126. disabled by calling SingleDisplay24().  The Priority is set using
  1127. OVPriority() and AmigaPriority().
  1128.  
  1129. A priority stencil can also be used to set the priority between OpalVision
  1130. and Amiga graphics on a pixel by pixel basis.  The priority stencil is
  1131. enabled by calling EnablePRStencil24() and disabled with
  1132. DisablePRStencil24().  The functions SetPRStencil24(), ClearPRStencil24(),
  1133. WritePRPixel24() and ReadPRPixel24() are provided to help manage the
  1134. priority stencil.
  1135.  
  1136. Note that when updating the frame buffer in dual display mode, the
  1137. information being sent out to the OpalVision will be visible and cause a
  1138. glitchy display.  To avoid this the dual display should be turned off when
  1139. updating and OpalVision priority should be set.  The following function is
  1140. useful to allow glitch free updates, note that it also blanks the sprite
  1141. during updates so that the sprite will not be written into the frame
  1142. buffer.
  1143.  
  1144.  
  1145. void Refresh_Display (void) 
  1146.         {
  1147.     OVPriority ();
  1148.     SingleDisplay24 ();             /* Set up 24bit only display        */
  1149.     SetSprite24 (NullPointer,0L);   /* Turn off sprite                  */
  1150.     Refresh24 ();                   /* Update frame buffer              */
  1151.     DualDisplay24 ();               /* Enable dual Amiga/24 bit display */
  1152.     AmigaPriority ();               /* Amiga over 24bit display         */
  1153.     SetSprite24 (Pointer,0L);       /* Reinstall sprite                 */ 
  1154.         }
  1155.  
  1156.  
  1157.  
  1158. 11.6    Dual Playfield Mode
  1159.  
  1160. Dual Playfield mode allows two low resolution 24bit OpalVision images to be
  1161. overlaid.  This can be achieved by writing two frames into the frame buffer
  1162. memory using the WriteFrame24() function and calling DualPlayfield24() to
  1163. enable dual playfield mode.  SinglePlayfield24() can be used to revert back
  1164. to single playfield mode.
  1165.  
  1166. When in dual playfield mode a playfield stencil is used to determine which
  1167. frame is displayed on a pixel by pixel basis.  The functions
  1168. SetPFStencil24(), ClearPFStencil24(), WritePFPixel24() and ReadPFPixel24()
  1169. are provided to help manage the playfield stencil.
  1170.  
  1171. The function UpdatePFStencil24() can be used to speed up the updates to the
  1172. frame buffer so that all consecutive updates will only update the memory
  1173. segments containing the playfield stencil.  Using a combination of this and
  1174. the above playfield routines fast wipes, dissolves and other transition
  1175. effects can be achieved.  After UpdatePFStencil24() has been called, it
  1176. takes only one field to update a non interlaced stencil, and two fields (1
  1177. frame) for an interlaced one.  Normal updating can be restored by calling
  1178. UpdateAll24()
  1179.  
  1180. 11.7    Manipulating The Opalvision Registers
  1181.  
  1182. The Library allows for direct manipulation of all the OpalVision registers
  1183. through library calls.  These all involve modifying a copy of the register
  1184. in the screen structure and calling a library function to update the
  1185. hardware registers.  Also using this method custom CoPro lists can be built
  1186. and updated into the OpalVision.
  1187.  
  1188. It is important to be aware that all hardware register updates occur during
  1189. the vertical blanking period, and your program must synchronize to this and
  1190. wait for the update to complete before attempting to modify the registers
  1191. again.  If the program is not synchronized, data may be lost.  The function
  1192. RegWait24() is available for this purpose.  RegWait24() should also be
  1193. called after calling any another library function which affects internal
  1194. registers, the CoPro or the palette.
  1195.  
  1196. 11.8    Screen Positioning
  1197.  
  1198. Version 2.0 and later of the Amiga Operation System supports an overscan
  1199. WorkBench screen.  If an overscan display is active, the library will
  1200. centre non-overscan OpalVision screens in the overscan region.  If you wish
  1201. to open an Amiga Screen as an overlay, it will also need to be centred to
  1202. maintain alignment between the Amiga and 24 bit displays.
  1203.  
  1204. The following code can be used to centre the Amiga intuition screen:
  1205.  
  1206.  
  1207. void Centre_Screen (struct NewScreen *NewScrn, ULONG ModeID)
  1208. {
  1209.    struct Rectangle Rect;
  1210.    SHORT Width;
  1211.  
  1212.     if (IntuitionBase->LibNode.lib_Version<36)
  1213.         return;
  1214.     if (!QueryOverscan (ModeID,&Rect,OSCAN_TEXT))
  1215.         return;
  1216.  
  1217.     Width = Rect.MaxX - Rect.MinX + 1;    /* Calculate overscan width */
  1218.     Width = (Width - NewScrn->Width)/2;    /* Calc center X position */
  1219.     NewScrn->LeftEdge = MAX (Width,0);
  1220. }
  1221.  
  1222.  
  1223.  Call Centre_Screen (&NewScreen,DisplayID) before opening the intuition
  1224. screen. DisplayID should be a standard 2.0 DisplayID such as 
  1225. PAL_MONITOR_ID|HIRES_KEY.
  1226.  
  1227. NOTE:  The Centre_Screen() code provided in previous revisions of this
  1228. manual was incorrect, if you have used the Centre_Screen() function
  1229. previously it should be changed to the above code.
  1230.  
  1231. Also note that it is not possible to display OpalVision graphics while the
  1232. Amiga display is in a high scan mode as available with the AA chip set.  To
  1233. avoid this problem, programs like Show24 should open an intuition screen
  1234. over the workbench screen to drop the Amiga display back into a standard
  1235. scan rate.
  1236.  
  1237.     IMPORTANT NOTE:
  1238.  
  1239. If you are opening an Amiga intuition screen as either a backdrop or as
  1240. or an overlay for menus, you must ensure that it is a 15KHz screen, this
  1241. means that Mode Promotion available under AmigaDOS3.0, if enabled, must
  1242. not promote your intuition screen to 31KHz. To avoid this you must
  1243. open a screen using the DisplayID tags either via OpenScreenTags() or
  1244. using an ExtNewScreen structure. The correct DisplayID's should be
  1245. either PAL_MONITOR_ID or NTSC_MONITOR_ID OR'ed with the correct
  1246. resolution flags.
  1247.  
  1248.  
  1249. 11.9    Horizontal Synchronisation
  1250.  
  1251. To maintain the OpalVision's horizontal synchronisation with the Amiga's
  1252. video the OpalVision uses the Amiga's output to detect the start of each
  1253. scan line.  Some consideration has to be given to this when writing
  1254. software for the OpalVision.
  1255.  
  1256. There are two horizontal synchronisation methods that can be used.  The
  1257. first method is to set the least significant bit of blue for the background
  1258. colour.  The OpalVision then uses the low to high transition of the LSB of
  1259. blue as the start of line indicator.  This is the preferred method as it
  1260. provides exact synchronisation with the Amiga's display.  When writing
  1261. programs which use an Amiga overlay to contain gadgets and menus, this is
  1262. easily achieved by using the LoadRGB24() graphics library function.  (i.e.
  1263. if you are setting colour 0 to black, use 001 rather than 000).
  1264.  
  1265. Sometimes it is not possible to ensure that the LSB blue of the background
  1266. colour is set, if you are not opening an Amiga screen for example, we
  1267. cannot assume that the LSB blue is set on the users WorkBench screen (set
  1268. in preferences).  In these situations, the OpalVision can be put into an
  1269. auto sync mode, it then uses a constant horizontal blanking period which
  1270. can be up to 2 hi-res pixels out of phase with the Amiga's display, this
  1271. simply means that the 24bit output can be shifted up to 2 pixels to the
  1272. left of the Amiga's graphics.  This mode can be enabled and disabled by
  1273. calling AutoSync24().
  1274.  
  1275. The autosync mode however cannot be used while updating the frame buffer,
  1276. and the library will automatically disable this mode while updating is
  1277. occurring, note that the 24 bit display will always be in sync with the
  1278. Amiga's graphics while updating the frame buffer.  Using the auto-sync mode
  1279. can then have the effect of causing the 24bit display to shift from left to
  1280. right when jumping in and out of buffer updating mode.
  1281.  
  1282. 11.10    Ownership
  1283.  
  1284. The OpalVision library is basically a passive entity, it contains a set of
  1285. functions to make access to the OpalVision hardware easier.  The only
  1286. active part of the library is a vertical blanking interrupt handler which
  1287. is always active while a display screen is open.  the interrupt handlers'
  1288. only function is to update the copper lists required to display the screen.
  1289.  
  1290. Any memory or resources allocated via the library calls are therefore owned
  1291. by the calling program, in simple terms, a display screen opened using
  1292. OpenScreen24() must be later closed by calling CloseScreen24(), similarly
  1293. all virtual screens opened by calling CreateScreen24() must be closed by
  1294. calling FreeScreen24().  The Lowmemupdate functions also have the side
  1295. effect of opening a display screen, this means that after calling
  1296. LowMemUpdate() (or the other versions of this function) you will actually
  1297. have 2 screens open, one display and one virtual, the display screen opened
  1298. by LowMemUpdate() MUST be closed by calling CloseScreen24().  All screens
  1299. opened by calling LoadImage24() must also be closed.
  1300.  
  1301.  
  1302. 12.0    SUMMARY OF LIBRARY FUNCTIONS
  1303.  
  1304. 12.1    Drawing Routines 
  1305.  
  1306. ClearPFStencil24        - Clears the playfield stencil 
  1307.  
  1308. ClearPRStencil24        - Clears the priority stencil
  1309.  
  1310. ClearScreen24           - Clears all bitplanes in a screen
  1311.  
  1312. DrawEllipse24           - Draw an ellipse in the designated screen structure 
  1313.  
  1314. DrawLine                - Draw a line in the designated screen structure 
  1315.  
  1316. ReadPFPixel24           - Reads the state of the specified playfield pixel 
  1317.  
  1318. ReadPixel24             - Returns colour information for a given pixel 
  1319.  
  1320. ReadPRPixel24           - Reads the state of the specified priority pixel
  1321.  
  1322. RectFill24              - Draws a solid rectangle in a screen
  1323.  
  1324. SetPFStencil24          - Sets all bits in the playfield stencil to 1 
  1325.  
  1326. SetPRStencil24          - Sets all bits in the priority stencil to 1 
  1327.  
  1328. SetScreen24             - Fills screen with a colour 
  1329.  
  1330. WritePFPixel24          - Writes Dual Playfield stencil information 
  1331.  
  1332. WritePixel24            - Writes a pixel 
  1333.  
  1334. WritePRPixel24          - Writes Overlay priority stencil information Memory
  1335.  
  1336.  
  1337. 12.2    Conversion Routines 
  1338.  
  1339. BitPlanetoOV            - Converts a standard bit planes to OpalVision format 
  1340.  
  1341. ILBMtoOV                - Converts interleaved bitmap to OpalVision format 
  1342.  
  1343. OVtoBitPlane            - Converts OpalVision format to standard bit plane 
  1344.                 format 
  1345.  
  1346. OVtoILBM                - Converts OpalVision format to interleaved bitmap 
  1347.                 format 
  1348.  
  1349. OVtoRGB                 - Converts OpalVision format to red, green and blue 
  1350.                 byte planes
  1351.  
  1352. RGBtoOV                 - Converts red, green and blue byte planes to OpalVision 
  1353.                 format File I/O Routines
  1354.  
  1355. LoadImage24             - Loads JPEG, 24bit IFF, Fast Format 24bit,Palette 
  1356.                 Mapped (up to 256 colours), Hold and Modify 
  1357.                 and Extra Half Brite files 
  1358.  
  1359. SaveIFF24               - Saves an OpalScreen as an IFF interleaved bitmap 
  1360.                 file with 24bit Thumbnail 
  1361.  
  1362. SaveJPEG24              - Saves an OpalScreen as an JPEG JFIF file with 24bit 
  1363.                 Thumbnail 
  1364.  
  1365. WriteThumbnail24        - Writes a Thumbnail chunk for the specified screen to 
  1366.                 a specified file 
  1367.  
  1368. 12.3    Coprocessor Routines
  1369.  
  1370. AmigaPriority           - Gives Amiga priority over OpalVision graphics 
  1371.  
  1372. DualPlayField24         - Initiates OpalVision 24bit Dual Playfield mode 
  1373.  
  1374. OVPriority              - Gives OpalVision priority over Amiga Graphics 
  1375.  
  1376. SetCoPro24              - Modifies a single instruction in the CoPro list 
  1377.  
  1378. SinglePlayField24       - Sets single playfield Mode 
  1379.  
  1380. UpdateCoPro24           - Updates coprocessor instructions to the OpalVision 
  1381.                 Display Control Routines 
  1382.  
  1383. ActiveScreen24          - Returns pointer to currently displayed OpalVision 
  1384.                 screen 
  1385.  
  1386. AppendCopper24          - Append Amiga copper lists to currently displayed 
  1387.                 copper list 
  1388.  
  1389. ClearDisplayBottom24    - Resets the OpalVision Display Bottom 
  1390.  
  1391. DisablePRStencil24      - Disables the use of priority stencil in dual display 
  1392.                 mode 
  1393.  
  1394. EnablePRStencil24       - Enables the use of priority stencil in dual display 
  1395.                 mode 
  1396.  
  1397. DualDisplay24           - Sets up an Amiga/OpalVision dual display 
  1398.  
  1399. FadeIn24                - Fades any palette mapped display from black in a 
  1400.                 specified time 
  1401.  
  1402. FadeOut24               - Fades any palette mapped display to black in a 
  1403.                 specified time 
  1404.  
  1405. LatchDisplay24          - Latch the OpalVision display.  
  1406.  
  1407. LowMemUpdate24          - Low Chip Memory usage frame buffer update.  
  1408.  
  1409. LowMem2Update24         - Low Chip Memory usage frame buffer update.
  1410.  
  1411. LowMemRGB24             - Low Chip Memory usage frame buffer update from an RGB 
  1412.                 array.
  1413.  
  1414. PaletteMap24            - Enables or disable palette mapping
  1415.  
  1416. Scroll24                - Scrolls currently displayed image by a given distance
  1417.  
  1418. SetDisplayBottom24      - Sets the OpalVision display bottom
  1419.  
  1420. SetRGB24                - Sets a single palette entry 
  1421.  
  1422. SingleDisplay24         - Sets up an Amiga or OpalVision single display 
  1423.  
  1424. UpdatePalette24         - Updates palette information to the OpalVision Frame 
  1425.                 Buffer Management 
  1426.  
  1427. ClearQuick24            - Clear all OpalVision frame buffer memory 
  1428.  
  1429. CloseScreen24           - Closes the currently displayed screen and frees 
  1430.                 resources 
  1431.  
  1432. Config24                - Returns Hardware configuration information 
  1433.  
  1434. CreateScreen24          - Creates an arbitrarily sized virtual OpalScreen 
  1435.  
  1436. DisplayFrame24          - Sets the currently displayed frame within the frame 
  1437.                 buffer memory 
  1438.  
  1439. FreeScreen24            - Frees a virtual OpalScreen
  1440.  
  1441. FreezeFrame24           - Freezes the currently displayed screen.  
  1442.                 (requires Scan Rate Converter) 
  1443.  
  1444. OpenScreen24            - Allocates all resources and displays an OpalVision 
  1445.                 screen 
  1446.  
  1447. Refresh24               - Refreshes information in the frame buffer memory 
  1448.  
  1449. RegWait24               - Waits for the completion of register updates 
  1450.  
  1451. SetControlBit24         - Modifies a bit in the control line data
  1452.  
  1453. SetLoadAddress24        - Updates the OpalVision load address register 
  1454.  
  1455. SetSprite24             - Sets Amiga sprites on OpalVision display 
  1456.  
  1457. StopUpdate24            - Stops updates to the frame buffer memory 
  1458.  
  1459. UpdateAll24             - Resets the internal update structure so all required 
  1460.                 banks are updated 
  1461.  
  1462. UpdateDelay24           - Allows user definable update frequency 
  1463.  
  1464. UpdatePFStencil24       - Continuously update Dual Playfield stencil only 
  1465.  
  1466. UpdateRegs24            - Updates pixel read mask, palette load address and 
  1467.                 control register 
  1468.  
  1469. WriteFrame24            - Sets the current frame to be written within the frame 
  1470.                 buffer memory Frame Grabber Control
  1471.  
  1472.  
  1473. 13.0    DEFINITION OF TERMS 
  1474.  
  1475. The following library function description is given in
  1476. standard C calling conventions.  The terms used are described here for non
  1477. C programmers.
  1478.  
  1479. void                     -This specifies that there are no return values or 
  1480.               input parameters.
  1481.  
  1482. USHORT                   -An unsigned 16bit integer.
  1483.  
  1484. UBYTE                    -An unsigned byte.
  1485.  
  1486. long                     -A signed 32bit integer.
  1487.  
  1488. BOOL             -A 32bit boolean value.  FALSE = 0, any non zero value 
  1489.               is TRUE.
  1490.  
  1491. struct OpalScreen *OScrn -A pointer to an OpalScreen structure described 
  1492.               previously.
  1493.  
  1494. UBYTE **Array[]          -A pointer to an array of pointers to UBYTE sized 
  1495.               memory.
  1496.  
  1497. long (*Function)()       -A pointer to a function (routine) which returns a long 
  1498.                           result in D0.
  1499.  
  1500. NULL                     -A NULL pointer value (0).
  1501.  
  1502. BPTR                     -A BCPL pointer returned by a DOS Open() call.
  1503.  
  1504.  
  1505.  
  1506.  
  1507.